home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 8 / 05 / term-4.0-source.lha / TrapPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-26  |  19.5 KB  |  850 lines

  1. /*
  2. **    TrapPanel.c
  3. **
  4. **    Editing panel for trap list
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_LIST,GAD_SEQUENCE,GAD_COMMAND,
  13.         GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  14.         GAD_NEW,GAD_REMOVE,GAD_CLEAR,
  15.         GAD_LOAD,GAD_SAVE,GAD_USE
  16.     };
  17.  
  18. VOID
  19. TrapPanel()
  20. {
  21.     struct LayoutHandle    *Handle;
  22.     struct GenericList    *TrapList;
  23.     struct TrapNode        *Node,
  24.                 *Next;
  25.  
  26.     ObtainSemaphore(&GenericListTable[GLIST_TRAP] -> ListSemaphore);
  27.  
  28.     TrapList = GenericListTable[GLIST_TRAP];
  29.  
  30.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  31.         LH_LocaleHook,    &LocaleHook,
  32.     TAG_DONE))
  33.     {
  34.         struct Window    *LocalWindow;
  35.         struct IBox     Bounds;
  36.  
  37.         LT_New(Handle,
  38.             LA_Type,    VERTICAL_KIND,
  39.         TAG_DONE);
  40.         {
  41.             LT_New(Handle,
  42.                 LA_Type,    VERTICAL_KIND,
  43.                 LA_LabelID,    MSG_TRAPPANEL_TRAP_CONTROLS_TXT,
  44.             TAG_DONE);
  45.             {
  46.                 LT_New(Handle,
  47.                     LA_Type,    LISTVIEW_KIND,
  48.                     LA_LabelID,    MSG_TRAPPANEL_TRAP_LIST_TXT,
  49.                     LA_LabelPlace,    PLACE_LEFT,
  50.                     LA_Chars,    30,
  51.                     LA_Lines,    10,
  52.                     LA_ID,        GAD_LIST,
  53.                     LALV_CursorKey,    TRUE,
  54.                     LALV_MaxGrowY,    20,
  55.                     LALV_MaxGrowX,    50,
  56.                     GTLV_Labels,    TrapList,
  57.  
  58.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  59.                 TAG_DONE);
  60.  
  61.                 LT_New(Handle,
  62.                     LA_Type,    STRING_KIND,
  63.                     LA_LabelID,    MSG_TRAPPANEL_SEQUENCE_TXT,
  64.                     LA_ID,        GAD_SEQUENCE,
  65.                     GTST_MaxChars,    255,
  66.                     GA_Disabled,    TRUE,
  67.                 TAG_DONE);
  68.  
  69.                 LT_New(Handle,
  70.                     LA_Type,    STRING_KIND,
  71.                     LA_LabelID,    MSG_TRAPPANEL_COMMAND_TXT,
  72.                     LA_ID,        GAD_COMMAND,
  73.                     GTST_MaxChars,    255,
  74.                     GA_Disabled,    TRUE,
  75.                 TAG_DONE);
  76.  
  77.                 LT_EndGroup(Handle);
  78.             }
  79.  
  80.             LT_New(Handle,
  81.                 LA_Type,    HORIZONTAL_KIND,
  82.             TAG_DONE);
  83.             {
  84.                 LT_New(Handle,
  85.                     LA_Type,    HORIZONTAL_KIND,
  86.                     LA_LabelID,    MSG_V36_0038,
  87.                     LA_Spread,    TRUE,
  88.                     LA_SameSize,    TRUE,
  89.                 TAG_DONE);
  90.                 {
  91.                     LT_New(Handle,
  92.                         LA_Type,    BUTTON_KIND,
  93.                         LA_LabelText,    "|<",
  94.                         LA_ID,        GAD_TOP,
  95.                         LA_NoKey,    TRUE,
  96.                         GA_Disabled,    TRUE,
  97.                     TAG_DONE);
  98.  
  99.                     LT_New(Handle,
  100.                         LA_Type,    BUTTON_KIND,
  101.                         LA_LabelText,    "<",
  102.                         LA_ID,        GAD_UP,
  103.                         LA_NoKey,    TRUE,
  104.                         GA_Disabled,    TRUE,
  105.                     TAG_DONE);
  106.  
  107.                     LT_New(Handle,
  108.                         LA_Type,    BUTTON_KIND,
  109.                         LA_LabelText,    ">",
  110.                         LA_ID,        GAD_DOWN,
  111.                         LA_NoKey,    TRUE,
  112.                         GA_Disabled,    TRUE,
  113.                     TAG_DONE);
  114.  
  115.                     LT_New(Handle,
  116.                         LA_Type,    BUTTON_KIND,
  117.                         LA_LabelText,    ">|",
  118.                         LA_ID,        GAD_END,
  119.                         LA_NoKey,    TRUE,
  120.                         GA_Disabled,    TRUE,
  121.                     TAG_DONE);
  122.  
  123.                     LT_EndGroup(Handle);
  124.                 }
  125.  
  126.                 LT_New(Handle,
  127.                     LA_Type,    HORIZONTAL_KIND,
  128.                     LA_LabelID,    MSG_V36_0043,
  129.                     LA_Spread,    TRUE,
  130.                     LA_SameSize,    TRUE,
  131.                 TAG_DONE);
  132.                 {
  133.                     LT_New(Handle,
  134.                         LA_Type,    BUTTON_KIND,
  135.                         LA_LabelID,    MSG_FASTMACROPANEL_NEW_GAD,
  136.                         LA_ID,        GAD_NEW,
  137.                     TAG_DONE);
  138.  
  139.                     LT_New(Handle,
  140.                         LA_Type,    BUTTON_KIND,
  141.                         LA_LabelID,    MSG_GLOBAL_REMOVE_GAD,
  142.                         LA_ID,        GAD_REMOVE,
  143.                         GA_Disabled,    TRUE,
  144.                     TAG_DONE);
  145.  
  146.                     LT_New(Handle,
  147.                         LA_Type,    BUTTON_KIND,
  148.                         LA_LabelID,    MSG_UPLOADQUEUE_CLEAR_TXT,
  149.                         LA_ID,        GAD_CLEAR,
  150.                         GA_Disabled,    TrapList -> ListHeader . mlh_Head -> mln_Succ == NULL,
  151.                     TAG_DONE);
  152.  
  153.                     LT_EndGroup(Handle);
  154.                 }
  155.  
  156.                 LT_EndGroup(Handle);
  157.             }
  158.  
  159.             LT_New(Handle,
  160.                 LA_Type,    VERTICAL_KIND,
  161.             TAG_DONE);
  162.             {
  163.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  164.  
  165.                 LT_EndGroup(Handle);
  166.             }
  167.  
  168.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  169.                 LAGR_SameSize,    TRUE,
  170.                 LAGR_Spread,    TRUE,
  171.                 LA_ExtraSpace,    TRUE,
  172.             TAG_DONE);
  173.             {
  174.                 LT_New(Handle,
  175.                     LA_Type,    BUTTON_KIND,
  176.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  177.                     LA_ID,        GAD_USE,
  178.                     LABT_ReturnKey,    TRUE,
  179.                     LABT_ExtraFat,    TRUE,
  180.                 TAG_DONE);
  181.  
  182.                 LT_New(Handle,
  183.                     LA_Type,    BUTTON_KIND,
  184.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  185.                     LA_ID,        GAD_LOAD,
  186.                     LABT_ExtraFat,    TRUE,
  187.                 TAG_DONE);
  188.  
  189.                 LT_New(Handle,
  190.                     LA_Type,    BUTTON_KIND,
  191.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  192.                     LA_ID,        GAD_SAVE,
  193.                     LABT_ExtraFat,    TRUE,
  194.                     GA_Disabled,    TrapList -> ListHeader . mlh_Head -> mln_Succ == NULL,
  195.                 TAG_DONE);
  196.  
  197.                 LT_EndGroup(Handle);
  198.             }
  199.  
  200.             LT_EndGroup(Handle);
  201.         }
  202.  
  203.         if(Screen)
  204.         {
  205.             Bounds . Left    = Window -> LeftEdge;
  206.             Bounds . Top    = Window -> TopEdge;
  207.             Bounds . Width    = Window -> Width;
  208.             Bounds . Height    = Window -> Height;
  209.         }
  210.  
  211.         if(LocalWindow = LT_Layout(Handle,LocaleString(MSG_TRAPPANEL_TRAP_PREFERENCES_TXT),Screen ? &Bounds : NULL,0,0,IDCMP_CLOSEWINDOW,0,
  212.             LAWN_HelpHook,        &GuideHook,
  213.             WA_DepthGadget,        TRUE,
  214.             WA_CloseGadget,        TRUE,
  215.             WA_DragBar,        TRUE,
  216.             WA_RMBTrap,        TRUE,
  217.             WA_Activate,        TRUE,
  218.         TAG_DONE))
  219.         {
  220.             struct IntuiMessage    *Message;
  221.             BOOLEAN             Done = FALSE;
  222.             ULONG             MsgClass,
  223.                          MsgQualifier;
  224.             UWORD             MsgCode;
  225.             struct Gadget        *MsgGadget;
  226.  
  227.             struct TrapNode        *Selected = NULL;
  228.             ULONG             Offset = 0;
  229.  
  230.             UBYTE              DummyBuffer[MAX_FILENAME_LENGTH],
  231.                         *DummyChar;
  232.             struct FileRequester    *FileRequest;
  233.  
  234. /*            GuideContext(CONTEXT_FASTMACROS);*/
  235.  
  236.             PushWindow(LocalWindow);
  237.  
  238.             do
  239.             {
  240.                 if(Wait(PORTMASK(LocalWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  241.                     break;
  242.  
  243.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(LocalWindow -> UserPort))
  244.                 {
  245.                     MsgClass    = Message -> Class;
  246.                     MsgQualifier    = Message -> Qualifier;
  247.                     MsgCode        = Message -> Code;
  248.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  249.  
  250.                     GT_ReplyIMsg(Message);
  251.  
  252.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  253.  
  254.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  255.                         Done = TRUE;
  256.  
  257.                     if(MsgClass == IDCMP_GADGETUP)
  258.                     {
  259.                         switch(MsgGadget -> GadgetID)
  260.                         {
  261.                             case GAD_USE:
  262.  
  263.                                 Done = TRUE;
  264.                                 break;
  265.  
  266.                             case GAD_TOP:
  267.  
  268.                                 LT_SetAttributes(Handle,GAD_LIST,
  269.                                     GTLV_Labels,    ~0,
  270.                                 TAG_DONE);
  271.  
  272.                                 Remove((struct Node *)Selected);
  273.  
  274.                                 AddHead((struct List *)TrapList,(struct Node *)Selected);
  275.  
  276.                                 Offset = 0;
  277.  
  278.                                 LT_SetAttributes(Handle,GAD_LIST,
  279.                                     GTLV_Labels,    TrapList,
  280.                                     GTLV_Selected,    Offset,
  281.                                     GTLV_Top,    Offset,
  282.                                 TAG_DONE);
  283.  
  284.                                 LT_SetAttributes(Handle,GAD_TOP,
  285.                                     GA_Disabled,    TRUE,
  286.                                 TAG_DONE);
  287.  
  288.                                 LT_SetAttributes(Handle,GAD_UP,
  289.                                     GA_Disabled,    TRUE,
  290.                                 TAG_DONE);
  291.  
  292.                                 LT_SetAttributes(Handle,GAD_DOWN,
  293.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  294.                                 TAG_DONE);
  295.  
  296.                                 LT_SetAttributes(Handle,GAD_END,
  297.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  298.                                 TAG_DONE);
  299.  
  300.                                 TrapsChanged = TRUE;
  301.                                 break;
  302.  
  303.                             case GAD_UP:
  304.  
  305.                                 LT_SetAttributes(Handle,GAD_LIST,
  306.                                     GTLV_Labels,    ~0,
  307.                                 TAG_DONE);
  308.  
  309.                                 Node = (struct TrapNode *)Selected -> Node . ln_Pred -> ln_Pred;
  310.  
  311.                                 Remove((struct Node *)Selected);
  312.  
  313.                                 Insert((struct List *)TrapList,(struct Node *)Selected,(struct Node *)Node);
  314.  
  315.                                 Offset--;
  316.  
  317.                                 LT_SetAttributes(Handle,GAD_LIST,
  318.                                     GTLV_Labels,    TrapList,
  319.                                     GTLV_Selected,    Offset,
  320.                                     GTLV_Top,    Offset,
  321.                                 TAG_DONE);
  322.  
  323.                                 LT_SetAttributes(Handle,GAD_TOP,
  324.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  325.                                 TAG_DONE);
  326.  
  327.                                 LT_SetAttributes(Handle,GAD_UP,
  328.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  329.                                 TAG_DONE);
  330.  
  331.                                 LT_SetAttributes(Handle,GAD_DOWN,
  332.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  333.                                 TAG_DONE);
  334.  
  335.                                 LT_SetAttributes(Handle,GAD_END,
  336.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  337.                                 TAG_DONE);
  338.  
  339.                                 TrapsChanged = TRUE;
  340.  
  341.                                 break;
  342.  
  343.                             case GAD_DOWN:
  344.  
  345.                                 LT_SetAttributes(Handle,GAD_LIST,
  346.                                     GTLV_Labels,    ~0,
  347.                                 TAG_DONE);
  348.  
  349.                                 Node = (struct TrapNode *)Selected -> Node . ln_Succ;
  350.  
  351.                                 Remove((struct Node *)Selected);
  352.  
  353.                                 Insert((struct List *)TrapList,(struct Node *)Selected,(struct Node *)Node);
  354.  
  355.                                 Offset++;
  356.  
  357.                                 LT_SetAttributes(Handle,GAD_LIST,
  358.                                     GTLV_Labels,    TrapList,
  359.                                     GTLV_Selected,    Offset,
  360.                                     GTLV_Top,    Offset,
  361.                                 TAG_DONE);
  362.  
  363.                                 LT_SetAttributes(Handle,GAD_TOP,
  364.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  365.                                 TAG_DONE);
  366.  
  367.                                 LT_SetAttributes(Handle,GAD_UP,
  368.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  369.                                 TAG_DONE);
  370.  
  371.                                 LT_SetAttributes(Handle,GAD_DOWN,
  372.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  373.                                 TAG_DONE);
  374.  
  375.                                 LT_SetAttributes(Handle,GAD_END,
  376.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  377.                                 TAG_DONE);
  378.  
  379.                                 TrapsChanged = TRUE;
  380.  
  381.                                 break;
  382.  
  383.                             case GAD_END:
  384.  
  385.                                 LT_SetAttributes(Handle,GAD_LIST,
  386.                                     GTLV_Labels,    ~0,
  387.                                 TAG_DONE);
  388.  
  389.                                 Remove((struct Node *)Selected);
  390.  
  391.                                 AddTail((struct List *)TrapList,(struct Node *)Selected);
  392.  
  393.                                 Offset = TrapList -> ListCount - 1;
  394.  
  395.                                 LT_SetAttributes(Handle,GAD_LIST,
  396.                                     GTLV_Labels,    TrapList,
  397.                                     GTLV_Selected,    Offset,
  398.                                     GTLV_Top,    Offset,
  399.                                 TAG_DONE);
  400.  
  401.                                 LT_SetAttributes(Handle,GAD_TOP,
  402.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  403.                                 TAG_DONE);
  404.  
  405.                                 LT_SetAttributes(Handle,GAD_UP,
  406.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  407.                                 TAG_DONE);
  408.  
  409.                                 LT_SetAttributes(Handle,GAD_DOWN,
  410.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  411.                                 TAG_DONE);
  412.  
  413.                                 LT_SetAttributes(Handle,GAD_END,
  414.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  415.                                 TAG_DONE);
  416.  
  417.                                 TrapsChanged = TRUE;
  418.  
  419.                                 break;
  420.  
  421.                             case GAD_NEW:
  422.  
  423.                                 if(Node = CreateTrapNode("",""))
  424.                                 {
  425.                                     LT_SetAttributes(Handle,GAD_LIST,
  426.                                         GTLV_Labels,    ~0,
  427.                                     TAG_DONE);
  428.  
  429.                                     AddTail((struct List *)TrapList,(struct Node *)Node);
  430.  
  431.                                     LT_SetAttributes(Handle,GAD_LIST,
  432.                                         GTLV_Labels,    TrapList,
  433.                                         GTLV_Selected,    TrapList -> ListCount++,
  434.                                     TAG_DONE);
  435.  
  436.                                     LT_SetAttributes(Handle,GAD_COMMAND,
  437.                                         GTST_String,    "",
  438.                                         GA_Disabled,    FALSE,
  439.                                     TAG_DONE);
  440.  
  441.                                     LT_SetAttributes(Handle,GAD_SEQUENCE,
  442.                                         GTST_String,    "",
  443.                                         GA_Disabled,    FALSE,
  444.                                     TAG_DONE);
  445.  
  446.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  447.                                         GA_Disabled,    FALSE,
  448.                                     TAG_DONE);
  449.  
  450.                                     LT_SetAttributes(Handle,GAD_SAVE,
  451.                                         GA_Disabled,    FALSE,
  452.                                     TAG_DONE);
  453.  
  454.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  455.                                         GA_Disabled,    FALSE,
  456.                                     TAG_DONE);
  457.  
  458.                                     Selected = Node;
  459.  
  460.                                     Offset = MsgCode;
  461.  
  462.                                     LT_SetAttributes(Handle,GAD_TOP,
  463.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  464.                                     TAG_DONE);
  465.  
  466.                                     LT_SetAttributes(Handle,GAD_UP,
  467.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  468.                                     TAG_DONE);
  469.  
  470.                                     LT_SetAttributes(Handle,GAD_DOWN,
  471.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  472.                                     TAG_DONE);
  473.  
  474.                                     LT_SetAttributes(Handle,GAD_END,
  475.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  476.                                     TAG_DONE);
  477.  
  478.                                     LT_Activate(Handle,GAD_SEQUENCE);
  479.  
  480.                                     TrapsChanged = TRUE;
  481.                                 }
  482.                                 else
  483.                                     DisplayBeep(LocalWindow -> WScreen);
  484.  
  485.                                 break;
  486.  
  487.                             case GAD_CLEAR:
  488.  
  489.                                 LT_SetAttributes(Handle,GAD_LIST,
  490.                                     GTLV_Labels,    ~0,
  491.                                 TAG_DONE);
  492.  
  493.                                 FreeList((struct List *)TrapList);
  494.  
  495.                                 TrapList -> ListCount = 0;
  496.  
  497.                                 LT_SetAttributes(Handle,GAD_LIST,
  498.                                     GTLV_Labels,    TrapList,
  499.                                     GTLV_Selected,    ~0,
  500.                                 TAG_DONE);
  501.  
  502.                                 Selected = NULL;
  503.  
  504.                                 LT_SetAttributes(Handle,GAD_TOP,
  505.                                     GA_Disabled,    TRUE,
  506.                                 TAG_DONE);
  507.  
  508.                                 LT_SetAttributes(Handle,GAD_UP,
  509.                                     GA_Disabled,    TRUE,
  510.                                 TAG_DONE);
  511.  
  512.                                 LT_SetAttributes(Handle,GAD_DOWN,
  513.                                     GA_Disabled,    TRUE,
  514.                                 TAG_DONE);
  515.  
  516.                                 LT_SetAttributes(Handle,GAD_END,
  517.                                     GA_Disabled,    TRUE,
  518.                                 TAG_DONE);
  519.  
  520.                                 LT_SetAttributes(Handle,GAD_REMOVE,
  521.                                     GA_Disabled,    TRUE,
  522.                                 TAG_DONE);
  523.  
  524.                                 LT_SetAttributes(Handle,GAD_SEQUENCE,
  525.                                     GTST_String,    "",
  526.                                     GA_Disabled,    TRUE,
  527.                                 TAG_DONE);
  528.  
  529.                                 LT_SetAttributes(Handle,GAD_COMMAND,
  530.                                     GTST_String,    "",
  531.                                     GA_Disabled,    TRUE,
  532.                                 TAG_DONE);
  533.  
  534.                                 LT_SetAttributes(Handle,GAD_SAVE,
  535.                                     GA_Disabled,    TRUE,
  536.                                 TAG_DONE);
  537.  
  538.                                 LT_SetAttributes(Handle,GAD_CLEAR,
  539.                                     GA_Disabled,    TRUE,
  540.                                 TAG_DONE);
  541.  
  542.                                 TrapsChanged = FALSE;
  543.  
  544.                                 break;
  545.  
  546.                             case GAD_REMOVE:
  547.  
  548.                                 if(Selected)
  549.                                 {
  550.                                     LT_SetAttributes(Handle,GAD_LIST,
  551.                                         GTLV_Labels,    ~0,
  552.                                     TAG_DONE);
  553.  
  554.                                     if(--TrapList -> ListCount)
  555.                                     {
  556.                                         if(Selected -> Node . ln_Succ -> ln_Succ)
  557.                                             Node = (struct TrapNode *)Selected -> Node . ln_Succ;
  558.                                         else
  559.                                         {
  560.                                             Node = (struct TrapNode *)Selected -> Node . ln_Pred;
  561.  
  562.                                             Offset = 0;
  563.                                         }
  564.                                     }
  565.  
  566.                                     FreeNode((struct Node *)Selected);
  567.  
  568.                                     LT_SetAttributes(Handle,GAD_LIST,
  569.                                         GTLV_Labels,    TrapList,
  570.                                         GTLV_Selected,    Node -> Node . ln_Succ ? GetNodeOffset((struct Node *)Node,(struct List *)TrapList) : ~0,
  571.                                     TAG_DONE);
  572.  
  573.                                     if(!TrapList -> ListCount)
  574.                                     {
  575.                                         Selected = NULL;
  576.  
  577.                                         LT_SetAttributes(Handle,GAD_TOP,
  578.                                             GA_Disabled,    TRUE,
  579.                                         TAG_DONE);
  580.  
  581.                                         LT_SetAttributes(Handle,GAD_UP,
  582.                                             GA_Disabled,    TRUE,
  583.                                         TAG_DONE);
  584.  
  585.                                         LT_SetAttributes(Handle,GAD_DOWN,
  586.                                             GA_Disabled,    TRUE,
  587.                                         TAG_DONE);
  588.  
  589.                                         LT_SetAttributes(Handle,GAD_END,
  590.                                             GA_Disabled,    TRUE,
  591.                                         TAG_DONE);
  592.  
  593.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  594.                                             GA_Disabled,    TRUE,
  595.                                         TAG_DONE);
  596.  
  597.                                         LT_SetAttributes(Handle,GAD_SEQUENCE,
  598.                                             GTST_String,    "",
  599.                                             GA_Disabled,    TRUE,
  600.                                         TAG_DONE);
  601.  
  602.                                         LT_SetAttributes(Handle,GAD_COMMAND,
  603.                                             GTST_String,    "",
  604.                                             GA_Disabled,    TRUE,
  605.                                         TAG_DONE);
  606.  
  607.                                         LT_SetAttributes(Handle,GAD_SAVE,
  608.                                             GA_Disabled,    TRUE,
  609.                                         TAG_DONE);
  610.  
  611.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  612.                                             GA_Disabled,    TRUE,
  613.                                         TAG_DONE);
  614.                                     }
  615.                                     else
  616.                                     {
  617.                                         Selected = Node;
  618.  
  619.                                         LT_SetAttributes(Handle,GAD_COMMAND,
  620.                                             GTST_String,    Selected -> Command,
  621.                                         TAG_DONE);
  622.  
  623.                                         LT_SetAttributes(Handle,GAD_SEQUENCE,
  624.                                             GTST_String,    Selected -> Node . ln_Name,
  625.                                         TAG_DONE);
  626.  
  627.                                         LT_SetAttributes(Handle,GAD_TOP,
  628.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  629.                                         TAG_DONE);
  630.  
  631.                                         LT_SetAttributes(Handle,GAD_UP,
  632.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  633.                                         TAG_DONE);
  634.  
  635.                                         LT_SetAttributes(Handle,GAD_DOWN,
  636.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  637.                                         TAG_DONE);
  638.  
  639.                                         LT_SetAttributes(Handle,GAD_END,
  640.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  641.                                         TAG_DONE);
  642.                                     }
  643.  
  644.                                     TrapsChanged = TRUE;
  645.                                 }
  646.  
  647.                                 break;
  648.  
  649.                             case GAD_LIST:
  650.  
  651.                                 if(Selected = (struct TrapNode *)GetListNode(MsgCode,(struct List *)TrapList))
  652.                                 {
  653.                                     Offset = MsgCode;
  654.  
  655.                                     LT_SetAttributes(Handle,GAD_SEQUENCE,
  656.                                         GTST_String,    Selected -> Node . ln_Name,
  657.                                         GA_Disabled,    FALSE,
  658.                                     TAG_DONE);
  659.  
  660.                                     LT_SetAttributes(Handle,GAD_COMMAND,
  661.                                         GTST_String,    Selected -> Command,
  662.                                         GA_Disabled,    FALSE,
  663.                                     TAG_DONE);
  664.  
  665.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  666.                                         GA_Disabled,    FALSE,
  667.                                     TAG_DONE);
  668.  
  669.                                     LT_SetAttributes(Handle,GAD_TOP,
  670.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  671.                                     TAG_DONE);
  672.  
  673.                                     LT_SetAttributes(Handle,GAD_UP,
  674.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  675.                                     TAG_DONE);
  676.  
  677.                                     LT_SetAttributes(Handle,GAD_DOWN,
  678.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  679.                                     TAG_DONE);
  680.  
  681.                                     LT_SetAttributes(Handle,GAD_END,
  682.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  683.                                     TAG_DONE);
  684.                                 }
  685.  
  686.                                 break;
  687.  
  688.                             case GAD_SEQUENCE:
  689.  
  690.                                 if(Selected)
  691.                                 {
  692.                                     LT_SetAttributes(Handle,GAD_LIST,
  693.                                         GTLV_Labels,    ~0,
  694.                                     TAG_DONE);
  695.  
  696.                                     Selected = ChangeTrapNode(TrapList,Selected,(STRPTR)LT_GetAttributes(Handle,GAD_SEQUENCE,TAG_DONE),NULL);
  697.  
  698.                                     LT_SetAttributes(Handle,GAD_LIST,
  699.                                         GTLV_Labels,    TrapList,
  700.                                         GTLV_Selected,    GetNodeOffset((struct Node *)Selected,(struct List *)TrapList),
  701.                                     TAG_DONE);
  702.  
  703.                                     LT_SetAttributes(Handle,GAD_COMMAND,
  704.                                         GTST_String,    Selected -> Command,
  705.                                     TAG_DONE);
  706.  
  707.                                     LT_SetAttributes(Handle,GAD_SEQUENCE,
  708.                                         GTST_String,    Selected -> Node . ln_Name,
  709.                                     TAG_DONE);
  710.  
  711.                                     TrapsChanged = TRUE;
  712.  
  713.                                     LT_Activate(Handle,GAD_COMMAND);
  714.                                 }
  715.  
  716.                                 break;
  717.  
  718.                             case GAD_COMMAND:
  719.  
  720.                                 if(Selected)
  721.                                 {
  722.                                     Selected = ChangeTrapNode(TrapList,Selected,NULL,(STRPTR)LT_GetAttributes(Handle,GAD_COMMAND,TAG_DONE));
  723.  
  724.                                     TrapsChanged = TRUE;
  725.                                 }
  726.  
  727.                                 break;
  728.  
  729.                             case GAD_LOAD:
  730.  
  731.                                 SplitFileName(LastTraps,&DummyChar,DummyBuffer);
  732.  
  733.                                 LT_LockWindow(LocalWindow);
  734.  
  735.                                 if(FileRequest = GetFile(LocalWindow,LocaleString(MSG_TRAPPANEL_LOAD_TRAP_SETTINGS_TXT),DummyBuffer,FilePart(LastTraps),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  736.                                 {
  737.                                     LT_SetAttributes(Handle,GAD_LIST,
  738.                                         GTLV_Labels,    ~0,
  739.                                     TAG_DONE);
  740.  
  741.                                     Selected = NULL;
  742.  
  743.                                     if(!LoadTraps(DummyBuffer,TrapList))
  744.                                         ShowError(LocalWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  745.                                     else
  746.                                     {
  747.                                         strcpy(LastTraps,DummyBuffer);
  748.  
  749.                                         TrapsChanged = FALSE;
  750.                                     }
  751.  
  752.                                     LT_SetAttributes(Handle,GAD_LIST,
  753.                                         GTLV_Labels,    TrapList,
  754.                                     TAG_DONE);
  755.  
  756.                                     LT_SetAttributes(Handle,GAD_COMMAND,
  757.                                         GTST_String,    "",
  758.                                         GA_Disabled,    TRUE,
  759.                                     TAG_DONE);
  760.  
  761.                                     LT_SetAttributes(Handle,GAD_SEQUENCE,
  762.                                         GTST_String,    "",
  763.                                         GA_Disabled,    TRUE,
  764.                                     TAG_DONE);
  765.  
  766.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  767.                                         GA_Disabled,    TRUE,
  768.                                     TAG_DONE);
  769.  
  770.                                     LT_SetAttributes(Handle,GAD_TOP,
  771.                                         GA_Disabled,    TRUE,
  772.                                     TAG_DONE);
  773.  
  774.                                     LT_SetAttributes(Handle,GAD_UP,
  775.                                         GA_Disabled,    TRUE,
  776.                                     TAG_DONE);
  777.  
  778.                                     LT_SetAttributes(Handle,GAD_DOWN,
  779.                                         GA_Disabled,    TRUE,
  780.                                     TAG_DONE);
  781.  
  782.                                     LT_SetAttributes(Handle,GAD_END,
  783.                                         GA_Disabled,    TRUE,
  784.                                     TAG_DONE);
  785.  
  786.                                     LT_SetAttributes(Handle,GAD_SAVE,
  787.                                         GA_Disabled,    !TrapList -> ListCount,
  788.                                     TAG_DONE);
  789.  
  790.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  791.                                         GA_Disabled,    !TrapList -> ListCount,
  792.                                     TAG_DONE);
  793.  
  794.                                     FreeAslRequest(FileRequest);
  795.                                 }
  796.  
  797.                                 LT_UnlockWindow(LocalWindow);
  798.  
  799.                                 break;
  800.  
  801.                             case GAD_SAVE:
  802.  
  803.                                 SplitFileName(LastTraps,&DummyChar,DummyBuffer);
  804.  
  805.                                 LT_LockWindow(LocalWindow);
  806.  
  807.                                 if(FileRequest = GetFile(LocalWindow,LocaleString(MSG_TRAPPANEL_SAVE_TRAP_SETTINGS_TXT),DummyBuffer,FilePart(LastTraps),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  808.                                 {
  809.                                     if(!SaveTraps(DummyBuffer,(struct List *)TrapList))
  810.                                         ShowError(LocalWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  811.                                     else
  812.                                     {
  813.                                         strcpy(LastTraps,DummyBuffer);
  814.  
  815.                                         TrapsChanged = FALSE;
  816.                                     }
  817.  
  818.                                     FreeAslRequest(FileRequest);
  819.                                 }
  820.  
  821.                                 LT_UnlockWindow(LocalWindow);
  822.  
  823.                                 break;
  824.                         }
  825.                     }
  826.                 }
  827.             }
  828.             while(!Done);
  829.  
  830.             PopWindow();
  831.         }
  832.  
  833.         LT_DeleteHandle(Handle);
  834.     }
  835.  
  836.     for(Node = (struct TrapNode *)TrapList -> ListHeader . mlh_Head ; Next = (struct TrapNode *)Node -> Node . ln_Succ ; Node = Next)
  837.     {
  838.         if(!Node -> Node . ln_Name[0] || !Node -> SequenceLen)
  839.         {
  840.             Remove(Node);
  841.  
  842.             FreeVecPooled(Node);
  843.  
  844.             TrapList -> ListCount--;
  845.         }
  846.     }
  847.  
  848.     ReleaseSemaphore(&GenericListTable[GLIST_TRAP] -> ListSemaphore);
  849. }
  850.